iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

Pandas|資料前處理工具 系列 第 16

Day 16|自定義轉換必學的apply()函數

  • 分享至 

  • xImage
  •  

  在昨天標籤編碼法(Label Encoding)的舉例中,我們可以透過 sklearn 中的函數 LabelEncoder 將類別型態轉為數值型態,那大家是否逆向思考過「如何將數值型態轉換為類別型態呢?」,為了更熟悉操作,我決定將內容寫下來作為一個整理和複習!話不多說,一起看下去吧!

■ 問題|如何將數值依據區間範圍轉換為類別型態?

舉例:將18~40歲設為青年,41~65歲設為壯年,65歲以上設為老年
https://ithelp.ithome.com.tw/upload/images/20231001/20162238bce5bVKXXn.jpg

■ 方法|自定義函式結合應用函數

使用自定義函式 def 設定條件後,以 apply() 函式轉換。

import pandas as pd
data = {'name':['Alan','Chris','Dora','Elas','Ida'],
        'gender':['M','M','F','F','M'],
        'age':[68,23,32,50,42]}
df = pd.DataFrame(data)

# 自定義函式:設定年齡段區間
def group(age):
    if 18 <= age <= 40:
        return '青年'
    elif 40 < age <= 65:
        return '壯年'
    else:
        return '老年'

# 新增 age_group 欄位呈現
df['age_group'] = df['age'].apply(group)
print(df)

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20231001/20162238q8QBxRDsxN.png

■ 方法|匿名函式結合應用函數

Lambda 函式又被稱為「匿名函式」,不需要透過 def 替函式命名,適用於一次性的操作,未來無法再次呼叫,其寫法簡易 lambda arguments:expression 是只有一行運算式的 Python 函式。

  • arguments 參數,可以有零個或多個
  • expression 包含單一運算式的表達式
import pandas as pd
data = {'name':['Alan','Chris','Dora','Elas','Ida'],
        'gender':['M','M','F','F','M'],
        'age':[68,23,32,50,42]}
df = pd.DataFrame(data)
# 使用Lambda函式,透過apply()將年紀轉換成年齡段區間
df['age_group'] = df['age'].apply(lambda age:'青年' if 18 <= age <= 40 else 
					                        ('壯年' if 40 < age <= 65 else '老年'))
print(df)

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20231001/20162238c3XvEyt49n.png

■ 結語

想要自行定義轉換規則,可以使用 def 或 Lambda,前者雖然會寫比較多行,但對於團隊協同開發時,不僅可以重複取用,還易於閱讀,而後者的優點則是簡潔快速,大家可以視需求決定操作!如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱唷!

我是 Eva,一位正在努力跨進資料科學領域的女子!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium,期待與您的相遇!】


上一篇
Day 15|資料清理-型態轉換
下一篇
Day 17|資料合併的三種常用語法
系列文
Pandas|資料前處理工具 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言